#include "compile_run.hpp"
#include "../common/httplib.h"

using namespace ns_compile_run;
using namespace httplib;

void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}

// ./compile_server 8080
int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    // 测试编译运行模块
    // std::string in_json, out_json;
    // Json::Value val;
    // val["code"] = R"(#include <iostream>
    // int main()
    // {
    //     std::cout << "hello world" << std::endl;
    //     aaaaa
    //     return 0;
    // })";
    // val["input"] = "";
    // val["cpu_limit"] = 1;
    // val["mem_limit"] = 1024 * 50;
    // Json::FastWriter fw;
    // in_json = fw.write(val);

    // CompileRun::Start(in_json, &out_json);
    // std::cout << out_json << std::endl;
    
    // 测试 cpp-httplib
    Server svr;
    // svr.Get("/hello", [](const Request& req, Response& resp){
    //     resp.set_content("hello world!你好！httplib", "text/plain;charset=utf-8");
    // });
    svr.Post("/compile_and_run", [](const Request& req, Response& resp){
        // 用户请求的服务正文就是我们想要的 json string
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileRun::Start(in_json, &out_json);
            // 发送响应回给用户
            // content-type 是直接填的，使用适配 json 格式的 application/json
            resp.set_content(out_json, "application/json;charset=utf-8");
        }
    });
    svr.listen("0.0.0.0", atoi(argv[1]));
    return 0;
}